package com.chinasoft;

public class Box {
    private int x;
    private int y;
    private int[][] map;
    private int contains = 2;

    public Box(int x, int y, int[][] map) {
        this.x = x;
        this.y = y;
        this.map = map;
    }

    public boolean match(int x, int y) {
        if (this.x == x && this.y == y) {
            return true;
        } else {
            return false;
        }

    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public int[][] getMap() {
        return map;
    }

    public void setMap(int[][] map) {
        this.map = map;
    }

    public int getContains() {
        return contains;
    }

    public void setContains(int contains) {
        this.contains = contains;
    }

    /**
     * 根据指定方向移动盒子
     * 此方法更新盒子的位置和状态，根据移动方向改变其坐标，并检查位置是否合法
     *
     * @param d 移动方向，可以是上、下、左、右
     */
    public void move(Direction d) {
        // 根据传入的方向参数，执行相应的移动逻辑
        switch (d) {
            case Right:
                // 将当前位置的状态保存到地图中，获取右侧位置的状态到contains，并向右移动
                map[y][x] = contains;
                contains = map[y][x + 1];
                x++;
                break;
            case Left:
                // 将当前位置的状态保存到地图中，获取左侧位置的状态到contains，并向左移动
                map[y][x] = contains;
                contains = map[y][x - 1];
                x--;
                break;
            case Down:
                // 将当前位置的状态保存到地图中，获取下方位置的状态到contains，并向下移动
                map[y][x] = contains;
                contains = map[y + 1][x];
                y++;
                break;
            case Up:
                // 将当前位置的状态保存到地图中，获取上方位置的状态到contains，并向上移动
                map[y][x] = contains;
                contains = map[y - 1][x];
                y--;
                break;
            default:
                // 当传入的方向参数无法识别时，输出错误信息
                System.out.println("unkown move in box");
                break;
        }
        // 移动后，根据新位置是否合法，更新地图状态
        if (isOk()) {
            map[y][x] = 9;
        } else {
            map[y][x] = 3;
        }
    }

    /**
     * 判断箱子是否包含金子
     * <p>
     * 此方法用于检查箱子中是否含有金子通过比较箱子中的物品代码来判断
     * 如果箱子中包含金子（物品代码为4），则方法返回true，表示箱子状态为"ok"
     * 否则，返回false
     *
     * @return boolean 如果箱子中包含金子，则返回true；否则返回false
     */
    public boolean isOk() {
        // 如果箱子里面 有金子， 返回  ok
        if (contains == 4) {
            return true;
        }
        return false;
    }


}